﻿using System;
using System.Linq;
using BLL;
using COMMON;
using System.Web.UI.WebControls;
using VO;

namespace PopPromotoraCallCenter.Admin
{
    public partial class ConsultaHistoricoAtendimento : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                CarregarFiltroCampanha();
                CarregarFiltroAtendente();
                CarregarFiltroCliente();
                CarregarFiltroStatus();
            }
        }

        #region Metodos

        #region CarregarFiltroCampanha
        protected void CarregarFiltroCampanha()
        {
            var retorno = HistoricoAtendimentoBLL.SelectHistoricoCampanha();
            if (retorno.Error == Enumerator.Error.Success)
            {
                cblCampanha.DataTextField = "nomeCampanha";
                cblCampanha.DataValueField = "idCampanha";
                cblCampanha.DataSource = retorno.List;
                cblCampanha.DataBind();
            }
            else
                Funcao.Alert(ClientScript, retorno.Message);
        }
        #endregion

        #region CarregarFiltroAtendente
        protected void CarregarFiltroAtendente()
        {
            var retorno = HistoricoAtendimentoBLL.SelectHistoricoAtendente();
            if (retorno.Error == Enumerator.Error.Success)
            {
                cblAtendente.DataTextField = "NomeAtendente";
                cblAtendente.DataValueField = "idAtendente";
                cblAtendente.DataSource = retorno.List;
                cblAtendente.DataBind();
            }
            else
                Funcao.Alert(ClientScript, retorno.Message);
        }
        #endregion

        #region CarregarFiltroCliente
        protected void CarregarFiltroCliente()
        {
            var retorno = HistoricoAtendimentoBLL.SelectHistoricoCliente();
            if (retorno.Error == Enumerator.Error.Success)
            {
                cblCliente.DataTextField = "nmCliente";
                cblCliente.DataValueField = "idCliente";
                cblCliente.DataSource = retorno.List;
                cblCliente.DataBind();
            }
            else
                Funcao.Alert(ClientScript, retorno.Message);            
        }
        #endregion

        #region CarregarFiltroStatus
        protected void CarregarFiltroStatus()
        {
            var retorno = HistoricoAtendimentoBLL.SelectHistoricoStatus();
            if (retorno.Error == Enumerator.Error.Success)
            {
                cblStatus.DataTextField = "nome";
                cblStatus.DataValueField = "idStatus";
                cblStatus.DataSource = retorno.List;
                cblStatus.DataBind();
            }
            else
                Funcao.Alert(ClientScript, retorno.Message);
        }
        #endregion

        #region Consultar
        protected void Consultar()
        {
            //Filtro Status
            var listStatus = (from ListItem status in cblStatus.Items where status.Selected select int.Parse(status.Value)).ToList();

            //Filtro Campanha
            var listCampanha = (from ListItem campanha in cblCampanha.Items where campanha.Selected select int.Parse(campanha.Value)).ToList();

            //Filtro Atendente
            var listAtendente = (from ListItem atendente in cblAtendente.Items where atendente.Selected select int.Parse(atendente.Value)).ToList();

            //Filtro Cliente
            var listCliente = (from ListItem cliente in cblCliente.Items where cliente.Selected select int.Parse(cliente.Value)).ToList();

            //Filtro Proposta
            int idProposta = 0;
            int.TryParse(txtProposta.Text.Trim(), out idProposta);

            int tipoProposta = int.Parse(rblProposta.SelectedValue);

            //Filtro Data
            DateTime? dataDe = null;
            DateTime? dataAte = null;
            dataDe = Funcao.DateTimeTryParseNull(txtDataDe.Text.Trim());
            dataAte = Funcao.DateTimeTryParseNull(txtDataAte.Text.Trim());

            //Carrega objeto filtro
            var objFiltro = new FiltroHistoricoAtendimento();
            objFiltro.idAtendente = listAtendente;
            objFiltro.idCampanha = listCampanha;
            objFiltro.idCliente = listCliente;
            objFiltro.idStatus = listStatus;
            objFiltro.idProposta = idProposta;
            objFiltro.tipoProposta = tipoProposta;
            objFiltro.dataDe = dataDe;
            if (dataAte != null)
                dataAte = ((DateTime) dataAte).AddDays(1).AddSeconds(-1);
            objFiltro.dataAte = dataAte;

            //Chama método de consulta
            var retorno = HistoricoAtendimentoBLL.selectHistoricoAtendimentoFiltro(objFiltro);
            var totalSegundos = 0;
            if (retorno.Error == Enumerator.Error.Success)
            {
                gvHistorico.DataSource = retorno.List;
                gvHistorico.DataBind();

                //Total Tempo Atendimento
                var retornoSegundos = HistoricoAtendimentoBLL.selectTempoTotalHistoricoAtendimentoFiltro(objFiltro);
                if (retornoSegundos.Error == Enumerator.Error.Success)
                {
                    totalSegundos = retornoSegundos.ID;
                    gvHistorico.FooterRow.Cells[6].Text = "TOTAL: ";
                    gvHistorico.FooterRow.Cells[7].Text = Funcao.FormataData(totalSegundos);
                }
                else
                    Funcao.Alert(ClientScript, retornoSegundos.Message);

                Accordion1.SelectedIndex = 1;
            }
            else
                Funcao.Alert(ClientScript, retorno.Message);
            lblQtd.Text = retorno.List.Count().ToString();

            //Tempo médio de atendimento
            var qtd = int.Parse(lblQtd.Text);
            lblTempoMedio.Text = Funcao.FormataData(int.Parse((totalSegundos / qtd).ToString()));

            var retornoRanking = HistoricoAtendimentoBLL.selectRankingHistoricoAtendimentoFiltro(objFiltro);
            if (retornoRanking.Error == Enumerator.Error.Success)
            {
                gvRanking.DataSource = retornoRanking.List;
                gvRanking.DataBind();
            }
            else
                Funcao.Alert(ClientScript, retornoRanking.Message);
        }
        #endregion

        #endregion

        #region Eventos

        #region btnConsultar_Click
        protected void btnConsultar_Click(object sender, EventArgs e)
        {
            Consultar();
        }
        #endregion

        #region gvHistorico_PageIndexChanging
        protected void gvHistorico_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gvHistorico.PageIndex = e.NewPageIndex;
            Consultar();
        }
        #endregion

        #endregion

    }
}